home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / arch / powerpc / include / asm / cputhreads.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  1.5 KB  |  72 lines

  1. #ifndef _ASM_POWERPC_CPUTHREADS_H
  2. #define _ASM_POWERPC_CPUTHREADS_H
  3.  
  4. #include <linux/cpumask.h>
  5.  
  6. /*
  7.  * Mapping of threads to cores
  8.  */
  9.  
  10. #ifdef CONFIG_SMP
  11. extern int threads_per_core;
  12. extern int threads_shift;
  13. extern cpumask_t threads_core_mask;
  14. #else
  15. #define threads_per_core    1
  16. #define threads_shift        0
  17. #define threads_core_mask    (CPU_MASK_CPU0)
  18. #endif
  19.  
  20. /* cpu_thread_mask_to_cores - Return a cpumask of one per cores
  21.  *                            hit by the argument
  22.  *
  23.  * @threads:    a cpumask of threads
  24.  *
  25.  * This function returns a cpumask which will have one "cpu" (or thread)
  26.  * bit set for each core that has at least one thread set in the argument.
  27.  *
  28.  * This can typically be used for things like IPI for tlb invalidations
  29.  * since those need to be done only once per core/TLB
  30.  */
  31. static inline cpumask_t cpu_thread_mask_to_cores(cpumask_t threads)
  32. {
  33.     cpumask_t    tmp, res;
  34.     int        i;
  35.  
  36.     res = CPU_MASK_NONE;
  37.     for (i = 0; i < NR_CPUS; i += threads_per_core) {
  38.         cpus_shift_left(tmp, threads_core_mask, i);
  39.         if (cpus_intersects(threads, tmp))
  40.             cpu_set(i, res);
  41.     }
  42.     return res;
  43. }
  44.  
  45. static inline int cpu_nr_cores(void)
  46. {
  47.     return NR_CPUS >> threads_shift;
  48. }
  49.  
  50. static inline cpumask_t cpu_online_cores_map(void)
  51. {
  52.     return cpu_thread_mask_to_cores(cpu_online_map);
  53. }
  54.  
  55. static inline int cpu_thread_to_core(int cpu)
  56. {
  57.     return cpu >> threads_shift;
  58. }
  59.  
  60. static inline int cpu_thread_in_core(int cpu)
  61. {
  62.     return cpu & (threads_per_core - 1);
  63. }
  64.  
  65. static inline int cpu_first_thread_in_core(int cpu)
  66. {
  67.     return cpu & ~(threads_per_core - 1);
  68. }
  69.  
  70. #endif /* _ASM_POWERPC_CPUTHREADS_H */
  71.  
  72.